1. Technical Field
The present invention relates in general to a system and method for software rejuvenation. More particularly, the present application relates to a system and method that proactively rejuvenates software applications on a single computer system in order to maintain software performance and improve availability.
2. Description of the Related Art
Using software applications for extended periods of time often results in degraded performance (i.e. increased response time or results that deviate from specifications) and application failure (i.e. application hanging or unexpected termination of application). Over time, a software program receives allocations of memory and, in some cases, creates additional objects. When the objects are no longer needed, the program normally dereferences it and then deallocates the associated memory. In the object programming paradigm, the object is dereferenced and the associated memory becomes what is commonly referred to as “garbage.” Garbage collection is a routine that is periodically run to deallocate the memory marked as garbage.
During software design and development, many bugs are easily found, especially during the testing and debugging phases. However, many bugs remain in software that are often difficult to identify and fix. While a software program is running for an extended period of time, bugs inadvertently left in the software can cause degraded performance (i.e. increased response time or results that deviate from specifications) and failure (i.e. application hanging or unexpected termination of application) of the software program. This performance degradation and application failure is due to the “aging” of the software program. “Aging” refers to the characteristics of operational software that gradually degrade over time due to bugs in the application, or the middleware, or the operating system. The external symptoms include gradual degradation in performance, results that deviate from specifications, low memory or out-of-memory condition, other resource exhaustion, application hanging, or eventual application failure. Typical causes of software aging are resource leaks such as memory leaks, memory bloating, buffer overflows, data corruption, accumulation of round-off errors, and storage space fragmentation. The effects of software aging are transient in nature and restarting the application or rebooting clears up the problem. Adverse effects of software aging are preventable with a periodic application of the preemptive software rejuvenation.
Repeated additions and deletions of information in memory can cause fragmented condition such that no single space (e.g. page or buffer) in memory is large enough to hold more information. This is the condition referred to as storage space fragmentation. The continued program operation could be elongated by increasing the storage space (e.g. pagefile), however, the storage space will be depleted at some point. Rejuvenation is effective against storage space fragmentation.
While rejuvenation is helpful, rejuvenation is also disruptive to clients. Prior art provided various workaround solutions. Downtime scheduling during low periods of server usage has been recommended for single computer systems to minimize the cost of the downtime associated with rejuvenation. In other prior works, hardware redundancy has been used to mask the rejuvenation downtime so that client can continue to access the server during rejuvenation. Dual on-board computer system may provide continuous service to the client by alternating the on-duty and off-duty cycle. While one on-board computer is powered down (i.e. off-duty), a second on-board computer remains operational (i.e. on-duty) for a duty period to provide service to the clients. At the end of the duty period, the down computer is powered up, becomes operational, begins providing service to the clients, and the previously on-duty computer powers off. This cycle is repeated. Computer clusters have been used to mask the rejuvenation downtime in distributed and service oriented computing. In the computer cluster rejuvenation model, while a node is taken offline for reboot, other nodes in the cluster continue to process the requests. Hot-passive replication has been used in dual computer environment to provide rejuvenation transparency to the client. The rejuvenation is accomplished by switching the failure-probable primary-host with the robust secondary-host. The rejuvenation downtime, however, remains an issue when hardware redundancy is not used.
In a distributed (multiple-computer) setting, one approach is to rejuvenate individual nodes of a computer cluster by periodically re-booting the nodes. When a node is taken offline for rejuvenation, the other nodes in the cluster continue to process requests. However, the approach does not work when clustered computing cannot be used, such as in a single-computer setting.
In a single computer setting, at least two traditional approaches are used to address software aging. First, the computer system can be periodically booted. Rebooting forces the operating systems and applications running on the operating system to begin anew, thereby resetting the age of the operating system and the applications. Second, one or more individual applications can be terminated and restarted, thereby resetting the age of the restarted applications. The challenge of both of these approaches is that the application is offline for some amount of time. During this time it is unavailable to users who have to wait until the application are restarted and the data that was being processed by the application is reloaded.
What is needed, therefore, is a system and method that seamlessly rejuvenates one or more software applications on a single computer system. What is further needed is a system and method that rejuvenates the software applications without rebooting the computer system.